package com.yfp.device.service.impl;

import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONUtil;
import com.yfp.device.domain.DeviceCurrentComboStock;
import com.yfp.device.domain.dto.MqttDTO;
import com.yfp.device.domain.dto.StockSendMqttDTO;
import com.yfp.device.service.DeviceServer;
import com.yfp.common.core.constant.MqttConstants;
import com.yfp.device.mqtt.MqttGateway;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@Service
public class DeviceServerImpl implements DeviceServer {

    @Resource
    private MqttGateway mqttGateway;

    /**
     * 发送库存信息到设备
     *
     * @param machineId
     * @param newStocks
     */
    @Override
    public void sendStockInfo(String machineId, List<DeviceCurrentComboStock> newStocks) {

        List<StockSendMqttDTO> stockSendMqttDTOS = newStocks.stream().map(item -> {
            StockSendMqttDTO stockSendMqttDTO = new StockSendMqttDTO();
            stockSendMqttDTO.setComboId(item.getComboId());
            stockSendMqttDTO.setComboNum(String.valueOf(item.getComboNum()));
            return stockSendMqttDTO;
        }).collect(Collectors.toList());


        MqttDTO<StockSendMqttDTO> orderMakeDTOMqttDTO = new MqttDTO<>();
        orderMakeDTOMqttDTO.setCmd(MqttConstants.ORDERSERVICE_NOTICE_ORDER_STOCK_STATUS);
        orderMakeDTOMqttDTO.setPayload(stockSendMqttDTOS);

        String jsonStr = JSONUtil.toJsonStr(orderMakeDTOMqttDTO, JSONConfig.create().setIgnoreNullValue(false));
        log.info("向设备:{},发送套餐库存信息成功,下发消息为：{}", machineId, jsonStr);
        mqttGateway.sendToMqtt(machineId, jsonStr);
    }
}
